home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1191 / 1191.xpi / chrome / reminderfox.jar / content / reminderfox / mail / rmFxSendwReminder.js < prev    next >
Text File  |  2009-11-01  |  13KB  |  330 lines

  1. /**  
  2.  * add a 'reminder' with sending a message
  3.  *             
  4.  * @since
  5.  *     2008-08-04    Send++  FCC version with Listener to catch the msgId and write to Reminder
  6.  */
  7. function rmFx_msgSendwReminder () {    
  8. // -----------------------------------------------------------
  9.     // clear reminders from memory
  10.     reminderFox_clearRemindersAndTodos();
  11.     var reminders = reminderFox_getReminderEvents();    
  12.  
  13.     // --- setup an Listener so we can catch the messageId 
  14.     var identity = gAccountManager.getIdentity(document.getElementById("msgIdentity").value);
  15.     rmFx_FCC     = identity.fccFolder;    // remember 'send folder' for account
  16.  
  17.     rmFx_setFolderListener("add");
  18.     
  19.     // --- generate Reminder for message
  20.     var newDate = new Date();
  21.     newDate.setDate(newDate.getDate() + 1);    // default to using tomorrow's date for reminder
  22.     var rmFx_SwRm_Reference = reminderFox_generateUniqueReminderId(newDate);
  23.  
  24.     var org_References = gMsgCompose.compFields.references;
  25.     if (gMsgCompose.compFields.references == null || gMsgCompose.compFields.references == "") {
  26.         gMsgCompose.compFields.references  =  "<" + rmFx_SwRm_Reference + rmFx_ReferenceID +">";
  27.     } else {
  28.         gMsgCompose.compFields.references += " <" + rmFx_SwRm_Reference + rmFx_ReferenceID +">";
  29.     }
  30.     
  31.     var mailIdentifierString = "[" + reminderFox_getBundle().getString("rf.sendw.label") + "++]";
  32.     
  33.     var _subject = GetMsgSubjectElement().value;
  34.     var newReminderToBeAdded = new ReminderFoxEvent
  35.         ( rmFx_SwRm_Reference, newDate, mailIdentifierString + " " +_subject); //+ gMsgSubjectElement.value );
  36.  
  37.     var msgCompFields = gMsgCompose.compFields;
  38.     Recipients2CompFields(msgCompFields);
  39.  
  40.     newReminderToBeAdded.notes  = reminderFox_getBundle().getString("rf.add.mail.message.sender")     
  41.             + ": " + identity.email  +  "\n";
  42.     newReminderToBeAdded.notes +=    reminderFox_getBundle().getString("rf.add.mail.message.recipients")
  43.             + ": " + msgCompFields.to +  "\n";
  44.         if (msgCompFields.cc != "") {
  45.             newReminderToBeAdded.notes += "    CC:" + msgCompFields.cc + "\n";
  46.         }        
  47.         if (msgCompFields.bcc != "") {
  48.             newReminderToBeAdded.notes += "   BCC:" + msgCompFields.bcc + "\n";
  49.         }    
  50.         
  51.     var mailDate = new Date();
  52.     mailDate.setDate(mailDate.getDate());   
  53.     newReminderToBeAdded.notes += reminderFox_getBundle().getString("rf.add.mail.message.date")         
  54.             + ": " + rmFxMsgHdrDate(mailDate*1000) +  "\n";
  55.     
  56.     // TB PRIORITY definition converted for RmFx     
  57.     // the value is not language dependant!!  but the label="&highestPriorityCmd.label;"
  58.     // = [string] "Highest"    = [string] "High"        ===>> RmFx 'Important'=1
  59.     // = [string] "Normal"
  60.     // = [string] "Low"        = [string] "Lowest"
  61.     
  62.     if ((msgCompFields.priority == "Highest") || (msgCompFields.priority == "High")) {
  63.             newReminderToBeAdded.priority = 1;        // set RmFx 'Important'=1
  64.     }
  65.     var added = reminderFox_addReminderHeadlessly(newReminderToBeAdded, false );
  66.  
  67.     if (added == false) {    // [CANCEL] NOT 'added' --> reset the 'References' and don't send
  68.             gMsgCompose.compFields.references = org_References;
  69.     } else {
  70.         // now send the msg
  71.  
  72.         // msgID will be reset  with nsIMsgCompDeliverMode.Now and .Later 
  73.         // using .Later will store the msg to the FCC Folder
  74.         // before finally sending catch the msgId from for the reminder using Listener
  75.         try {
  76.         GenericSendMessage(nsIMsgCompDeliverMode.Now, true);  // second parameter for PB
  77.         } catch (e) {}
  78.     }
  79. }
  80.  
  81.  
  82. ///////////////////// -- open messages with  reminder reference -- /////////////
  83. /*        Open a reminder with the "Edit Reminder" dialog using the 
  84.  *    msgHdr "References" entry to check the "reminder-ID'.
  85.  *     a) for search with 'References'
  86.  *     b) for search of 'reminder.id'
  87.  * 
  88.  *     "Send with Reminder" adds an item 'References' to the message header
  89.  *     'reference-ID' :    "[string]@reminderfox"
  90.  *      - [string] build with reminderfox functions using time and random number,
  91.  *          this [string] will also being used for reminders UID
  92.  * 
  93.  *     A normal reply to such a msg will hold that header item value.  
  94.  *     This function will check for this reference-ID and use any such entry for 
  95.  *     a search and found-&-open of the initial reminder.
  96.  *     If multiple references are found a dialog with those reminder references
  97.  *     are displayed for selection.
  98.  **/
  99. function rmFxReminder4mailOpen(){
  100.     
  101.     var msgHdr = gDBView.hdrForFirstSelectedMessage;
  102.     
  103.     var rmRef=rmFxGetRmRef(msgHdr); // for matched 'References' and 'message-Id' in reminder list
  104.     if (rmRef.length == -1) {return}
  105.  
  106.     var activeReminders = reminderFox_getReminderEvents();    
  107.     
  108.     if (rmRef.length == 1) {    
  109.             rmFxOpenReminder(rmRef[0], msgHdr.messageId);
  110.     } else { // multiple 'References' entries in a msg found, display them for selection
  111.         var remOptions = { rmReferences : rmRef,
  112.                 msgSubject: msgHdr.subject, msgDate: msgHdr.date, msgFrom: msgHdr.author};               
  113.         var dlg = window.openDialog("chrome://reminderfox/content/mail/rmFxSendwReminderList.xul",
  114.                         "rmFxReminder4mailList", "chrome,centerscreen,resizable,dialog=no",  remOptions);
  115.     }    
  116. }    
  117.  
  118.  
  119. function  rmFx_go4it() {   
  120.     var curMsg = document.getElementById('rmFx_ReferencesListbox');
  121.     /*    
  122.       WINxP and LINUX have different behavior accessing the seletion _
  123.         WINxp  uses curMsg.currentIndex
  124.         LINUX  uses curMsg.selectedIndex
  125.     */
  126.     var currentIndex = -1;
  127.     if (curMsg.currentIndex != null) {
  128.         currentIndex = curMsg.currentIndex;
  129.     } else {
  130.         currentIndex = curMsg.selectedIndex;         
  131.     }
  132.     if (currentIndex == -1) {
  133.         window.close(); // no item selected
  134.         return;
  135.     }
  136.     var selcReminder = window.arguments[0].rmReferences[currentIndex];
  137.     rmFxOpenReminder(selcReminder);
  138. }
  139.     
  140. function rmFxOpenReminder(selcReminder) {   //, messageId){
  141.     // search  for current msgID, if found open that event    
  142.     
  143.     // search in 'reminder' list 
  144.     var activeReminders = reminderFox_getReminderEvents();
  145.     for ( var i = 0; i < activeReminders.length; i++ ) {
  146.         if (activeReminders[i].id ==selcReminder.id) {
  147.             activeReminders[i].messageID = selcReminder.messageID // '<' + messageId + '>';
  148.             var added = reminderFox_editEventHeadlessly(activeReminders[i].id, activeReminders[i],true);
  149.             return;
  150.         }
  151.     }    
  152.     // search in 'todo' lists 
  153.  
  154.     var reminderFoxTodosArrayArg =  reminderFox_getReminderTodos();
  155.     for ( var n in reminderFoxTodosArrayArg ) {
  156.         var todoList = reminderFoxTodosArrayArg[n];
  157.         
  158.           for ( var m in todoList ) {    
  159.             if (todoList[m].id == selcReminder.id) {
  160.             var added = reminderFox_editEventHeadlessly(todoList[m].id, todoList[m],false);
  161.             return;
  162.             }
  163.         }                        
  164.     }
  165.  
  166.     alert (reminderFox_getBundle().getString("rf.sendw.reminder.error"));    
  167. }
  168.  
  169. function rmFxReminder4mailList() {
  170.     var subject = window.arguments[0].msgSubject;
  171.     document.getElementById('idSubject')
  172.         .setAttribute("value", reminderFox_getBundle().getString("rf.add.mail.message.subject") +": " + subject);
  173.     
  174.     var author = window.arguments[0].msgFrom;
  175.     document.getElementById('idFrom')
  176.         .setAttribute("value", reminderFox_getBundle().getString("rf.add.mail.message.from") +": " + author);
  177.  
  178.     var msgDate = rmFxMsgHdrDate (window.arguments[0].msgDate);
  179.     document.getElementById('idDate')
  180.         .setAttribute("value", reminderFox_getBundle().getString("rf.add.mail.message.date") +": "  + msgDate); 
  181.     
  182.     var reminders = window.arguments[0].rmReferences;
  183.     var remNo = window.arguments[0].rmReferences.length;
  184.  
  185.     for (var n=0; n < remNo; n++) {
  186.         rmFxRListaddItem(n, 
  187.             reminders[n].id,        reminders[n].summary,
  188.             reminders[n].date,    reminders[n].notes);    
  189.     }
  190.     // preselect the first entry   ++++2do  ++++2do  ++++2do  ++++2do
  191.     // document.getElementById('rmFx_ReferencesListbox').setAttribute("index", "0");
  192. }
  193.  
  194. function rmFxRListaddItem(n, msgId, subject, dateStr, notes) {
  195. /*  this generate the list entries in form of:
  196.         <richlistitem id="rmFxRefList" value="3333356789-1233"  
  197.                     style="border-bottom: 1px dotted sienna;">
  198.             <vbox>
  199.                 <label value="Reminder's subjectXXXXX" style="font-weight: bold"/>
  200.                 <hbox><spacer width="20px"/><label value="Do 05.02.2008 13:30"/></hbox>
  201.                 <hbox><spacer width="20px"/><label value="Notes: xxxxxxxxxxxx"/></hbox>        
  202.             </vbox>
  203.         </richlistitem>
  204. */
  205.         var rlBox = document.getElementById('rmFx_ReferencesListbox');
  206.         var rlItem = document.createElement("richlistitem");
  207.         rlBox.appendChild(rlItem);
  208.             rlItem.setAttribute("id" , "rlItem" + n);
  209.             rlItem.setAttribute("value" , msgId);
  210.             rlItem.setAttribute("style" , "border-bottom: 1px dotted sienna;");
  211.  
  212.             var vbox0 = document.createElement("vbox");
  213.             rlItem.appendChild(vbox0);
  214.                 vbox0.setAttribute("id" , "vbox0" + n);
  215.                 if (n == 1) {
  216.                     vbox0.setAttribute("selected" , "true" );
  217.                 }
  218.  
  219.         // RmFx subject                        
  220.                 var labelS = document.createElement("label");
  221.                 vbox0.appendChild(labelS);
  222.                     labelS.setAttribute("value",  subject);
  223.                     labelS.setAttribute("style" , "font-weight: bold");
  224.         // RmFx date                        
  225.                 var hboxD = document.createElement("hbox");
  226.                 vbox0.appendChild(hboxD);
  227.                     var spacer1 = document.createElement("spacer");
  228.                     hboxD.appendChild(spacer1);
  229.                     spacer1.setAttribute("width" , "20px");
  230.                     
  231.                     var labelD = document.createElement("label");
  232.                     var bText= reminderFox_getBundle().getString("rf.add.mail.message.date")
  233.                     hboxD.appendChild(labelD);
  234.                     reminderFox_parseDateTimes(dateStr)
  235.                     labelD.setAttribute("value" , bText + ": " + rmFxMsgHdrDate(dateStr*1000));    
  236.                                     
  237.         // RmFx notes    
  238.                 if (notes != null ) {        
  239.                 var hboxN = document.createElement("hbox");
  240.                 vbox0.appendChild(hboxN);
  241.                     var spacer1 = document.createElement("spacer");
  242.                     hboxN.appendChild(spacer1);
  243.                     spacer1.setAttribute("width" , "20px");
  244.                     var labelN = document.createElement("label");
  245.                     hboxN.appendChild(labelN);
  246.                     var bText= reminderFox_getBundle().getString("rf.add.mail.message.notes")
  247.                     labelN.setAttribute("value" , bText + ": " ); 
  248.                     
  249.                     var notesArr = notes.split("\n");
  250.                     try { // just show the first three lines here 
  251.                         for (i=0; i< 3; i++){
  252.                             var hboxN = document.createElement("hbox");
  253.                             vbox0.appendChild(hboxN);
  254.                             var spacer1 = document.createElement("spacer");
  255.                             hboxN.appendChild(spacer1);
  256.                             spacer1.setAttribute("width" , "30px");
  257.  
  258.                             var labelN = document.createElement("label");
  259.                             hboxN.appendChild(labelN);
  260.                             labelN.setAttribute("value" , notesArr[i]); 
  261.                         }
  262.                     } catch (e) {}
  263.                 }
  264. }
  265.  
  266. // Get an array with reminders with an UID to be part of the 'References' 
  267. // entry in the message header data
  268. //   param:  msgHdr  
  269. //     if not passed with call, take the the msgHdr from the first selected message 
  270. //
  271. function rmFxGetRmRef(msgHdr) {        
  272.     if ((msgHdr == "") || (msgHdr == null)) {
  273.         msgHdr = gDBView.hdrForFirstSelectedMessage;
  274.     }
  275.     //    build 'References' string for reminder.id search
  276.     var rmReferences = new Array();
  277.     var refString="";
  278.     
  279.     if ((msgHdr.numReferences > 0)) {    
  280.         for (var n=0; n< msgHdr.numReferences; n++) { 
  281.          //    msgHdr.getStringReference(n) = "1202409095568-924858015@reminderfox"
  282.             if (msgHdr.getStringReference(n).indexOf(rmFx_ReferenceID) > -1) {
  283.                     refString += msgHdr.getStringReference(n)
  284.                         .substring(0,msgHdr.getStringReference(n).indexOf("@"))+",";    
  285.             }                            
  286.         }
  287.     } 
  288.     //  check 'reminder.id' 
  289.     var messageId =  msgHdr.messageId;
  290.     // strip out quotes as the extractHeader method returns some 
  291.     // message-id's with extraneous quotes
  292.     // like: "000c01c6941b$6ddb3c30$7be040"@foo.com
  293.     messageId = messageId.replace(new RegExp(/\"/g),"");
  294.     
  295.     // check 'reminders'
  296.     var j=0;
  297.     var reminderFoxEvents = reminderFox_getReminderEvents();
  298.     for ( var i = 0; i < reminderFoxEvents.length; i++ ) {
  299.         if ((reminderFoxEvents[i].messageID =="<"+messageId+">") 
  300.                 || (refString.indexOf(reminderFoxEvents[i].id) > -1)){
  301.             rmReferences[j] = reminderFoxEvents[i];
  302.             rmReferences[j].messageID = '<' + messageId + '>'
  303.             j++;
  304.         }
  305.     }
  306.     
  307.     // check 'todos'
  308.     //        [ReminderFox] Bug? Context Menu Thunderbird (add a reminder; open associated event)
  309.     //        jake london bb802 at scn.org  Tue Jul 15 13:58:31 PDT 2008
  310.  
  311.     var reminderFoxTodosArrayArg =  reminderFox_getReminderTodos();
  312.     for ( var n in reminderFoxTodosArrayArg ) {
  313.         var todoList = reminderFoxTodosArrayArg[n];
  314.         
  315.           for ( var m in todoList ) {    
  316.             if ((todoList[m].messageID =="<"+messageId+">") 
  317.                     || (refString.indexOf(todoList[m].id) > -1)){
  318.                 rmReferences[j] = todoList[m];
  319.                 rmReferences[j].messageID = '<' + messageId + '>'
  320.                 j++;
  321.             }
  322.         }                        
  323.     }
  324.  
  325.     return rmReferences;    // return an array of all matching reminders and todos
  326. }
  327.  
  328.  
  329.     
  330.